c++ - CreateFile 和长设备名
全部标签 我有一个正在从库中恢复大量数据的应用程序。我们正在使用WindowsServer2003。随着过程的进行,我们看到性能下降。我为我的4个主要任务添加了一些性能计数器,创建文件、从库中读取、写入数据、关闭文件。我们正在恢复数百万个文件。我观察到的是,随着进程的进行,createfileAPI的性能正在下降。其他操作一致。知道是什么原因造成的吗?提前感谢所有的回答/建议。问候,不山 最佳答案 文件系统是NTFS吗?数百万个文件是否都在同一个目录中,它们是否具有相似的名称?来自technetarticleonNTFSinternals:I
目前,我正在生成一个带有操作系统库函数(Windows.h)的消息框,它神奇地让我的程序保持事件状态并响应对回调函数的调用。有什么替代方法可以让程序默默地永远运行?捕获“Ctrl-c”或SIGINT并随后调用RemoveHook()以干净退出会很好,但不是必需的。HOOKmy_hook;CALLBACKmy_callback_fn(){...}intmain(){my_hook=SetHook(my_callback_fn);MessageBox("PressOKtostop.");//Thisisbad.RemoveHook(my_hook);return0;}
是否可以替代系统功能,就像在Linux和Solaris上使用LD_PRELOAD一样例如通过设置环境变量:LD_PRELOAD=/path/to/mymalloc.so我会使用我的替代malloc函数,而不是在已经安装在系统库中的C运行时中。系统dll中的所有其他功能将正常运行。 最佳答案 MicrosoftResearch有一个名为Detours的库这允许您拦截Win32API调用。DetoursisalibraryforinstrumentingarbitraryWin32functionsonx86,x64,andIA64ma
有什么方法可以在没有管理员权限的情况下在WindowsXP机器上复制锁定的文件?我使用了unloker工具,它很棒,但需要管理员权限才能安装和运行。如何用一些编程语言如perl/shell/cc++等来完成它。或者是否存在一些解决方法。 最佳答案 试试这个,http://www.howtogeek.com/howto/windows-vista/backupcopy-files-that-are-in-use-or-locked-in-windows/它应该可以帮助您解决问题。 关于wi
有什么方法可以从Solaris或OpenSolaris设置交叉编译Windows(XP、Vista、Win7)的C/C++代码,最好是64位和32位(对于Vista和Win7)?我的代码库已经是跨平台的,我想从Solaris或Linux交叉编译它(生成WindowsDLL和EXE)作为自动化过程的一部分。我想使用GCC套件,如果可能的话,我宁愿不需要使用CygwinDLL。如果可能,我在Solaris环境中需要哪些工具?我将如何编译/链接整个项目?如果这在Solaris中不可能,考虑到我想要我提到的所有Windows版本的32位和64位二进制文件,我应该如何从Linux开始?在此先
我的wxwidgets程序不允许在用户单击关机时关闭计算机。我在正常退出程序时遇到问题,所以我一直在直接调用exit()而不是像wxwidgets所说的那样删除顶部窗口。退出解决方法一直有效,但似乎wxwidgets在收到关闭窗口信号(?)时无法退出。我能否以某种方式捕获它并仅调用exit以便程序不会阻止窗口关闭? 最佳答案 Windows向所有应用程序发送WM_SHUTDOWN消息。此事件映射到您的wxWidgets应用程序中的EVT_END_SESSION。确保正确处理此事件。参见wxCloseEventClassReferen
我在处理一个大型项目时遇到了一个非常奇怪的问题。我在一个分区上写了一堆相同大小的文件(尝试了RAM磁盘和通过diskmgmt.msc创建的虚拟磁盘)。当没有足够的可用空间来容纳另一个文件时(如GetDiskFreeSpaceExW所报告),我删除了一个(只有一个)以前创建的文件并写入新文件。然后,我删除另一个旧文件并写入一个新文件,无限循环(因此,您可以将分区视为大小相同的文件的环形缓冲区)。在一系列的写入-删除(从几百到几千)之后,我在写入新文件时遇到了nofreespace错误(在此之前,GetDiskFreeSpaceExW报告足够的空间)。我请我的几位同事尝试在他们的硬件上重现
DosDevice的定义是什么?是C:DosDevice吗?COM1和CONDosDevice也是吗? 最佳答案 DosDevice是映射到NT/Windows对象管理器命名空间中某个位置的虚拟名称,它为设备提供与旧式dos名称的兼容性,例如C:COM1:等。对象管理器的命名空间允许所有事物的唯一条目由Windows操作系统管理。对象管理器的部分命名空间是为每个登录session虚拟化的。DosDevices是其中的一部分,存在于虚拟命名空间\DosDevices中。所以C:(COM1:etc)实际上是您登录的本地地址,或者更像是主
我想从系统访问远程系统中存在的COM端口。任何帮助将不胜感激。我在远程和本地系统中都使用WindowsXP。 最佳答案 com0com项目,尤其是com2tcp应用程序应该可以帮助您。InconjunctionwiththeNull-modememulator(com0com)thecom2tcpenablestouseaCOMportbasedapplicationstocommunicatewiththeTCP/IPbasedapplications.Italsoallowscommunicationwitharemoteser
有没有办法读取一个文件的数据,但在文件结束后继续读取硬盘上的数据?对于普通文件I/O,我可以只使用fread(),但很明显,它只会读到文件末尾。如果我补充说我需要在Windows计算机上使用它,这可能会有所帮助。我在谷歌上搜索的所有方法都是关于EOF的不相关主题的结果,例如人们在正常I/O方面遇到问题。我的理由是我不小心删除了我正在处理的文本文件中的部分文本,这是一整天的工作。我用谷歌搜索了一堆文件恢复的东西,但这似乎都是关于恢复已删除文件的,我的问题是文件仍然存在但没有它的一些信息,我希望其中一些数据仍然直接存在在当前标记的文件末尾之后,既没有在其他地方碎片化,也没有被声明或以其他方